/* 给定一个只包括 '('，')'，'{'，'}'，'['，']' 的字符串 s ，判断字符串是否有效。

有效字符串需满足：

左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
每个右括号都有一个对应的相同类型的左括号。 */

// 用一个map|json来维护左括号和右括号的对应关系
// 用一个栈来维护左括号 , 遇到右括号时，弹出栈顶元素，查看是否匹配
// 若不匹配或栈不为空返回false,遍历完毕后，栈为空，有效
const leftToRight = {
    "(" : ")",
    "{" : "}",
    "[" : "]"
};
const isValid = function(s){
    if(!s) return true;
    
    const stack = [];
    const len = s.length;
    if(len % 2 != 0){
        return false;
    }
    for(let i = 0 ; i < len ; i++){
        const ch = s[i];
    }
    if (ch=="(" || ch=="{"||ch=="["){
        stack.push(leftToRight[ch]);
    } else {
        if(!stack.length || stack.pop()!==ch){
            return false;
        }
    }
    return !stack.length;
}